// 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数，
// 并且返回接受余下的参数且返回结果的新函数的技术。简单理解题目意思，就是指，
// 我们将预定义的函数的参数逐一传入到curryIt中，当参数全部传入之后，就执行预定义函数。
function curryIt(fn) {
  let len = fn.length;
  console.log(fn, len);
  let args = [];
  let result = function (arg) {
    args.push(arg);
    len--;
    if (len <= 0) {
      return fn.apply(this, args);
    } else {
      return result
    }
  }
  return result
}

var fn = function (a, b, c, d) {
  return a + b + c + d;
}
const res = curryIt(fn)(1)(2)(3)(100);

console.log(res);
